package org.softee.functional;

import java.util.Collection;

import org.softee.functional.operation.Function;
import org.softee.functional.operation.Predicate;
import org.softee.functional.operation.ReduceFunction;
import org.softee.functional.operation.Transposal;

public interface Functional<F> {
    Functional<F> sequential();
    Functional<F> parallel();
    Functional<F> filter(Predicate<? super F> predicate);
    <T> Functional<T> map(Function<? super F, ? extends T> function);
    Functional<F> transpose(Transposal<F> transposal);
    F reduce(ReduceFunction<F> reduceFunction);
    Collection<F> values();
    void into(Collection<? super F> collection);
    //Functional<F> withExceptionHandler(ExceptionHandler e);
}
